package ssii.camino.server;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;

import ssii.camino.utils.UtilGeneral;

import android.app.Activity;
import android.util.Log;

public class Llamada {
	/**
	 * Guarda el contexto de la actividad que le llama
	 */
	public Activity activity;

	/**
	 * Guarda la respuesta del servidor, puede ser valores de control o
	 * informacion para parsear
	 * 
	 * @uml.property name="respuesta"
	 */
	private String respuesta;

	/**
	 * Constructor
	 * 
	 * @param _activity
	 * 
	 * @param _context
	 */
	public Llamada(final Activity _activity) {
		this.activity = _activity;
		this.respuesta = "";
	}

	/**
	 * Getters
	 * 
	 * @return String
	 * @uml.property name="respuesta"
	 */

	public String getRespuesta() {
		return this.respuesta;
	}

	/**
	 * Login de un usuario
	 * 
	 * @param nick
	 *            Nombre de usuario
	 * @param pass
	 *            Password
	 * @return True exito false si no
	 */
	public boolean login(final String nick, final String pass) {
		boolean retorno;
		HttpClient hc = new DefaultHttpClient();
		// HttpPost post = new HttpPost("http://10.0.2.2/login.php"); //local
		HttpPost post = new HttpPost("http://segurosalcole.comoj.com/login.php"); // server
																					// test
		List<NameValuePair> pairs = new ArrayList<NameValuePair>();
		pairs.add(new BasicNameValuePair("user", nick));
		pairs.add(new BasicNameValuePair("pass", pass));

		try {
			post.setEntity(new UrlEncodedFormEntity(pairs));
			HttpResponse rp = hc.execute(post);
			if (rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
				this.respuesta = EntityUtils.toString(rp.getEntity());
				JSONArray ja= new JSONArray(respuesta);
				String test = ja.getString(0);
				retorno = true;
			} else {
				retorno = false;
			}
		} catch (Exception e) {
			e.printStackTrace();
			Log.i("ERROR", "CONECTION PROBLEM");
			retorno = false;
		}
		return retorno;
	}

	/**
	 * Registra un usuario en la BD online
	 * 
	 * @param nick
	 *            Nombre de usuario
	 * @param pass
	 *            password del usuario
	 * @return True exito, false si hubo algun problema
	 */
	public boolean register(final String nick, final String pass,
			final String nombre, final String clave, final String colegio, final String correo) {
		HttpClient hc = new DefaultHttpClient();
		boolean retorno;
		// HttpPost post = new HttpPost("http://10.0.2.2/register.php");
		HttpPost post = new HttpPost(
				"http://segurosalcole.comoj.com/register.php"); // server
		List<NameValuePair> pairs = new ArrayList<NameValuePair>();
		pairs.add(new BasicNameValuePair("user", nick));
		pairs.add(new BasicNameValuePair("pass", pass));
		// pairs.add(new BasicNameValuePair("nombre", nombre));
		// pairs.add(new BasicNameValuePair("dir", dir));
		pairs.add(new BasicNameValuePair("nombre", nombre));
		pairs.add(new BasicNameValuePair("clave", clave));
		pairs.add(new BasicNameValuePair("colegio", colegio));
		pairs.add(new BasicNameValuePair("correo", correo));
		try {
			post.setEntity(new UrlEncodedFormEntity(pairs));
			HttpResponse rp = hc.execute(post);
			if (rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
				this.respuesta = EntityUtils.toString(rp.getEntity());
				if (this.respuesta.length() > 1) {
					this.respuesta = this.respuesta.substring(0, 1);
				}
				retorno = true;
			} else {
				retorno = false;
			}
		} catch (Exception e) {
			e.printStackTrace();
			retorno = false;
		}
		return retorno;
	}

	public boolean getAll(String colegio) {
		HttpClient hc = new DefaultHttpClient();
		boolean retorno;
		HttpPost post = new HttpPost(
				"http://segurosalcole.comoj.com/getAll.php");
		List<NameValuePair> pairs = new ArrayList<NameValuePair>();
		pairs.add(new BasicNameValuePair("colegio", colegio));
		try {
			post.setEntity(new UrlEncodedFormEntity(pairs));
			HttpResponse rp = hc.execute(post);
			if (rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
				String aux = EntityUtils.toString(rp.getEntity());
				this.respuesta = UtilGeneral.replaceSpecialChars(aux);

				retorno = true;
			} else {
				retorno = false;
			}
		} catch (Exception e) {
			e.printStackTrace();
			retorno = false;
		}
		return retorno;
	}

	public boolean spider(String colegio) {
		HttpClient hc = new DefaultHttpClient();
		boolean retorno;
		// HttpPost post = new HttpPost("http://10.0.2.2/register.php");
		HttpPost post = new HttpPost(
				"http://segurosalcole.comoj.com/getArania.php"); // server
		List<NameValuePair> pairs = new ArrayList<NameValuePair>();
		pairs.add(new BasicNameValuePair("colegio", colegio));
		try {
			post.setEntity(new UrlEncodedFormEntity(pairs));
			HttpResponse rp = hc.execute(post);
			if (rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
				this.respuesta = EntityUtils.toString(rp.getEntity());
				retorno = true;
			} else {
				retorno = false;
			}
		} catch (Exception e) {
			e.printStackTrace();
			retorno = false;
		}
		return retorno;
	}

	public Object getComercios(String colegio, String numUser) {
		HttpClient hc = new DefaultHttpClient();
		boolean retorno;
		// HttpPost post = new HttpPost("http://10.0.2.2/register.php");
		/*
		 * HttpPost post = new HttpPost(
		 * "http://segurosalcole.comoj.com/prueba.php"); // server
		 */
		HttpPost post = new HttpPost(
				"http://segurosalcole.comoj.com/getEstablecimiento.php");
		List<NameValuePair> pairs = new ArrayList<NameValuePair>();
		pairs.add(new BasicNameValuePair("colegio", colegio));
		pairs.add(new BasicNameValuePair("user", numUser));
		try {
			post.setEntity(new UrlEncodedFormEntity(pairs));
			HttpResponse rp = hc.execute(post);
			if (rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
				// InputStream s = rp.getEntity().getContent();
				String charset = EntityUtils.getContentCharSet(rp.getEntity());
				String aux = EntityUtils.toString(rp.getEntity());
				this.respuesta = UtilGeneral.replaceSpecialChars(aux);

				retorno = true;
			} else {
				retorno = false;
			}
		} catch (Exception e) {
			e.printStackTrace();
			retorno = false;
		}
		return retorno;
	}

	public Object subirRuta(String nick, String ruta, String colegio) {
		HttpClient hc = new DefaultHttpClient();
		boolean retorno;
		HttpPost post = new HttpPost(
				"http://segurosalcole.comoj.com/setRuta.php"); // server
		List<NameValuePair> pairs = new ArrayList<NameValuePair>();
		pairs.add(new BasicNameValuePair("colegio", colegio));
		pairs.add(new BasicNameValuePair("user", nick));
		pairs.add(new BasicNameValuePair("ruta", ruta));
		try {
			post.setEntity(new UrlEncodedFormEntity(pairs));
			HttpResponse rp = hc.execute(post);
			if (rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
				this.respuesta = EntityUtils.toString(rp.getEntity());
				if (this.respuesta.length() > 1) {
					this.respuesta = this.respuesta.substring(0, 1);
				}

				retorno = true;
			} else {
				retorno = false;
			}
		} catch (Exception e) {
			e.printStackTrace();
			retorno = false;
		}
		return retorno;
	}

	public Object subirValoracion(String nick, String colegio, String comercio,
			String dirComercio, String rating) {
		HttpClient hc = new DefaultHttpClient();
		boolean retorno;
		HttpPost post = new HttpPost(
				"http://segurosalcole.comoj.com/setValoracion.php"); // server
		List<NameValuePair> pairs = new ArrayList<NameValuePair>();
		pairs.add(new BasicNameValuePair("colegio", colegio));
		pairs.add(new BasicNameValuePair("user", nick));
		pairs.add(new BasicNameValuePair("establecimiento", comercio));
		pairs.add(new BasicNameValuePair("dir", dirComercio));
		pairs.add(new BasicNameValuePair("puntuacion", rating));

		try {
			post.setEntity(new UrlEncodedFormEntity(pairs));
			HttpResponse rp = hc.execute(post);
			if (rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
				this.respuesta = EntityUtils.toString(rp.getEntity());
				/*if (this.respuesta.length() > 1) {
					this.respuesta = this.respuesta.substring(0, 1);
				}*/

				retorno = true;
			} else {
				retorno = false;
			}
		} catch (Exception e) {
			e.printStackTrace();
			retorno = false;
		}
		return retorno;
	}
	public boolean getColegio(String colegio) {
		HttpClient hc = new DefaultHttpClient();
		boolean retorno;
		HttpPost post = new HttpPost(
				"http://segurosalcole.comoj.com/getColegio.php");
		List<NameValuePair> pairs = new ArrayList<NameValuePair>();
		pairs.add(new BasicNameValuePair("colegio", colegio));
		try {
			post.setEntity(new UrlEncodedFormEntity(pairs));
			HttpResponse rp = hc.execute(post);
			if (rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
				String aux = EntityUtils.toString(rp.getEntity());
				this.respuesta = UtilGeneral.replaceSpecialChars(aux);

				retorno = true;
			} else {
				retorno = false;
			}
		} catch (Exception e) {
			e.printStackTrace();
			retorno = false;
		}
		return retorno;
	}
	
	public Object getPass(String nick) {
		HttpClient hc = new DefaultHttpClient();
		boolean retorno;
		HttpPost post = new HttpPost(
				"http://segurosalcole.comoj.com/mail.php"); // server
		List<NameValuePair> pairs = new ArrayList<NameValuePair>();
		pairs.add(new BasicNameValuePair("user", nick));

		try {
			post.setEntity(new UrlEncodedFormEntity(pairs));
			HttpResponse rp = hc.execute(post);
			if (rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
				this.respuesta = EntityUtils.toString(rp.getEntity());
				if (this.respuesta.length() > 1) {
					this.respuesta = this.respuesta.substring(0, 1);
				}

				retorno = true;
			} else {
				retorno = false;
			}
		} catch (Exception e) {
			e.printStackTrace();
			retorno = false;
		}
		return retorno;
	}
}
